/*
 * @description:
 * @Author: lal
 * @Date: 2021-07-10 16:53:26
 * @LastEditors: lal
 * @LastEditTime: 2021-07-10 16:54:47
 */
/*
 * @lc app=leetcode.cn id=160 lang=javascript
 *
 * [160] 相交链表
 */

// @lc code=start
/**
 * Definition for singly-linked list.
 * function ListNode(val) {
 *     this.val = val;
 *     this.next = null;
 * }
 */

/**
 * @param {ListNode} headA
 * @param {ListNode} headB
 * @return {ListNode}
 */
var getIntersectionNode = function (headA, headB) {
  // 判空 如果有一个链表为空 就谈不上交点
  if (headA === null || headB === null) {
    return null
  }
  let pA = headA
  let pB = headB
  while (pA != pB) {
    // 先遍历一遍A的独特部分，然后AB公共部分，然后遍历B的独特部分；B亦然；相等时必定是交汇处；原理是上面的加法交换律
    pA = pA === null ? headB : pA.next
    pB = pB === null ? headA : pB.next
  }
  return pB
}
// @lc code=end
